package UI;

import UI.administrador.*;
import UI.funcionarios.*;
import UI.todos.PanelCerrandoSesion;
import UI.todos.PanelOpcionCambiarContrasenha;
import UI.usuariosinautenticar.PanelUsuarioSinAutenticar;
import gestorBD.Controlador;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class FramePrincipal extends JFrame {

    private JPanel panelGlobal = null;
    private JPanel panelAnterior = null;

    public FramePrincipal() {
        //Inicialización de la ventana que contiene a programa
        super("Bien Raíz OK 2.0");
        setSize(700, 500);
        Image icono = Toolkit.getDefaultToolkit().getImage(getClass().getResource("../resources/logo32.png"));
        setIconImage(icono);
        setResizable(false);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

        addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent we) {
                String ObjButtons[] = {"Sí", "No", "Cancelar"};
                int PromptResult = JOptionPane.showOptionDialog(null, "¿Desea guardar los cambios en el XML antes de salir?", "Guardar cambios", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE, null, ObjButtons, ObjButtons[1]);
                if (PromptResult == JOptionPane.YES_OPTION) {
                    Controlador.guardarXML();
                    System.out.println("XML actualizado correctamente");
                    System.exit(0);
                } else if (PromptResult == JOptionPane.NO_OPTION) {
                    System.exit(0);
                } else if (PromptResult == JOptionPane.CANCEL_OPTION) {
                    //No hacer nada
                }

            }
        });
    }

    public void resetearFrame() {
        if (panelGlobal != null) {
            this.remove(panelGlobal);
        }
        this.panelGlobal = new JPanel();
        this.revalidate();
        this.repaint();
    }

    public void mostrarPantallaParaIniciarSesion() {
        //Instrucciones comunes
        this.resetearFrame();
        this.setTitle("Bien Raíz OK 2.0");
        this.panelGlobal = new PanelUsuarioSinAutenticar();
        this.add(panelGlobal);

        //Instrucciones específicas
        this.setJMenuBar(null);

        //Finalmente...
        this.revalidate();

    }

    public void mostrarPantallaParaCerrarSesion() {
        //Instrucciones comunes
        this.resetearFrame();
        this.setTitle("Bien Raíz OK 2.0");
        this.panelGlobal = new PanelCerrandoSesion();
        this.add(panelGlobal);

        //Instrucciones específicas
        
        //Finalmente...
        this.revalidate();
    }

    public void mostrarPanelBienvenidaAdministrador() {
        //Instrucciones comunes
        this.resetearFrame();
        this.setTitle("Bien Raíz OK 2.0");
        this.panelGlobal = new PanelBienvenidaAdministrador();
        this.add(panelGlobal);

        //Instrucciones específicas
        
        //Finalmente...
        this.revalidate();
    }

    public void mostrarPanelBienvenidaFuncionario() {
        //Instrucciones comunes
        this.resetearFrame();
        this.setTitle("Bien Raíz OK 2.0");
        this.panelGlobal = new PanelBienvenidaFuncionario();
        this.add(panelGlobal);

        //Instrucciones específicas
        
        //Finalmente...
        this.revalidate();
    }

    public void mostrarPanelListarOpcionesDeUnUsuario() {
        //Instrucciones comunes
        this.resetearFrame();
        this.setTitle("Bien Raíz OK 2.0");
        this.panelGlobal = new PanelListarOpcionesDeUnUsuario();
        this.add(panelGlobal);

        //Instrucciones específicas
        
        //Finalmente...
        this.revalidate();
    }

    public void mostrarPanelListarTodasLasOpcionesDelSistema() {
        //Instrucciones comunes
        this.resetearFrame();
        this.panelGlobal = new PanelListarTodasLasOpcionesDelSistema();
        this.add(panelGlobal);

        //Instrucciones específicas
        
        //Finalmente...
        this.revalidate();
    }

    public void mostrarPanelOpcionesDeAdministrador() {
        //Instrucciones comunes
        this.resetearFrame();
        this.panelGlobal = new PanelOpcionesDeAdministrador();
        this.add(panelGlobal);

        //Instrucciones específicas
        
        //Finalmente...
        this.revalidate();
    }

    public void mostrarPanelOpcionesDeFuncionario() {
        //Instrucciones comunes
        this.resetearFrame();
        this.panelGlobal = new PanelOpcionesDeFuncionario();
        this.add(panelGlobal);

        //Instrucciones específicas
        
        //Finalmente...
        this.revalidate();
    }

    public void mostrarPanelDeAdministracionInvitados() {
        //Instrucciones comunes
        this.resetearFrame();
        this.setTitle("Bien Raíz OK 2.0");
        this.panelGlobal = new PanelAdministracionInvitados();
        this.add(panelGlobal);

        //Instrucciones específicas
        
        //Finalmente...
        this.revalidate();
    }

    public void mostrarPanelModificarMenuUsuario() {
        //Instrucciones comunes
        this.resetearFrame();
        this.setTitle("Bien Raíz OK 2.0");
        this.panelGlobal = new PanelModificarMenuUsuario();
        this.add(panelGlobal);

        //Instrucciones específicas
        
        //Finalmente...
        this.revalidate();
    }

    public void mostrarPanelAnterior() {
        //Instrucciones comunes
        this.resetearFrame();
        this.panelGlobal = panelAnterior;
        this.add(panelGlobal);

        //Instrucciones específicas
        
        //Finalmente...
        this.revalidate();
    }

    public void setPanelAnterior(JPanel panel) {
        this.panelAnterior = panel;
    }

    public void setBarraDeMenu(JMenuBar barraDeMenu) {
        this.setJMenuBar(barraDeMenu);
        this.revalidate();
    }

    public void mostrarPanel(JPanel panelAMostrar) {
        //Instrucciones comunes
        this.resetearFrame();
        this.panelGlobal = panelAMostrar;
        this.add(panelGlobal);

        //Instrucciones específicas
        
        //Finalmente...
        this.revalidate();
    }

    public void ejecutar(String opcionAEjecutar) {

        switch (opcionAEjecutar) {
            case "Consultar mi pago para un mes específico":
                new PanelOpcionConsultarPago().ejecutar();
                break;
            case "Mostrar todos mis clientes demandantes":
                new PanelOpcionListarClientesDemandantes().ejecutar();
                break;
            case "Cambiar mi contraseña":
                new PanelOpcionCambiarContrasenha().ejecutar();
                break;
            case "Ver todos los clientes de mis subordinados":
                new PanelOpcionListarClientesDeSubordinados().ejecutar();
                break;
            case "Registrar a un cliente":
                new PanelOpcionRegistrarUnCliente().ejecutar();
                break;
            case "Registrar un inmueble":
                new PanelOpcionRegistrarInmueble().ejecutar();
                break;
            case "Registrar una unidad":
                new PanelOpcionRegistrarUnidad().ejecutar();
                break;
            case "Registrar un funcionario a mi cargo":
                new PanelOpcionRegistrarUnFuncionario().ejecutar();
                break;
            case "Buscar una propiedad por código":
                new PanelOpcionBuscarPropiedadPorCodigo().ejecutar();
                break;
            case "Registrar un negocio":
                new PanelOpcionRegistrarUnNegocio().ejecutar();
                break;
            case "Mostrar mis subordinados":
                new PanelOpcionListarSubordinados().ejecutar();
                break;
            case "Ver todas las propiedades":
                new PanelOpcionListarTodasLasPropiedades().ejecutar();
                break;
            case "Buscar una propiedad por criterios":
                new PanelOpcionBuscarPropiedadPorCriterios().ejecutar();
                break;
        }
    }
}
